package 中等.双指针;

/**
 * 给你一个下标从 0 开始的字符串 str1 和 str2 。
 * 一次操作中，你选择 str1 中的若干下标。对于选中的每一个下标 i ，你
 * 将 str1[i] 循环 递增，变成下一个字符。也就是说 'a' 变成 'b' ，
 * 'b' 变成 'c' ，以此类推，'z' 变成 'a' 。
 * 如果执行以上操作 至多一次 ，可以让 str2 成为 str1 的子序列，请
 * 你返回 true ，否则返回 false 。
 * 注意：一个字符串的子序列指的是从原字符串中删除一些（可以一个字符
 * 也不删）字符后，剩下字符按照原本先后顺序组成的新字符串。
 *
 * @ https://leetcode.cn/problems/make-string-a-subsequence-using-cyclic-increments/description/
 * @date 2024/07/07
 */
public class 循环增长使字符串子序列等于另一个字符串_2825 {

    public static void main(String[] args) {

        System.out.println('z' - 'a');
    }

    /**
     * 双指针
     * str2 中的字符 i i+1 i-1  ，对应 str1 中的字符 j 相等的话，指针向右移动
     */
    public boolean canMakeSubsequence(String str1, String str2) {
        int idx1 = 0, idx2 = 0;

        while (idx2 < str2.length() && idx1 < str1.length()) {
            while (idx1 < str1.length()) {
                int diff = (int) str2.charAt(idx2) - (int) str1.charAt(idx1);
                if (diff == 1 || diff == 0 || diff == -25) {
                    break;
                }
                idx1++;
            }
            if (idx1 < str1.length()) {
                idx2++;
            }
            idx1++;
        }
        return idx2 == str2.length();

    }

}
